#include "UnityPrefix.h"
#include "GraphicsDevicesDB.h"
#include "Runtime/Utilities/ArrayUtility.h"


#if GRAPHICS_DEVICES_DB_AVAILABLE


// Device ID lists based on:
// General everything: http://pciids.sourceforge.net/pci.ids
// ATI:
//	May 2011, http://developer.amd.com/gpu_assets/ATI_Device_ID_List_May_2011.txt
//	July 2010, http://developer.amd.com/gpu_assets/ATI_Device_ID_List_July_2010.txt
//	Jan 2009, http://developer.amd.com/gpu_assets/ATI_Device_IDs_Jan_09.txt
// NVIDIA:
//  Home: http://developer.nvidia.com/content/device-id-list
//	March 2010, http://www.nvidia.com/object/device_ids.html
//	GeForce/ION/Quadro 257.41 WHQL driver INF list
// Mesa: http://cgit.freedesktop.org/mesa/mesa/tree/include/pci_ids
// Intel: http://software.intel.com/en-us/articles/intel-gma-3000-and-x3000-developers-guide/
// Linux kernel driver database, CONFIG_DRM_* stuff: http://cateee.net/lkddb/web-lkddb/index_d.html

// Performance tables can be found on Wikipedia, for better or worse:
// http://en.wikipedia.org/wiki/Comparison_of_AMD_graphics_processing_units
// http://en.wikipedia.org/wiki/Comparison_of_Nvidia_graphics_processing_units
// http://en.wikipedia.org/wiki/Comparison_of_Intel_graphics_processing_units
// also here: http://www.techarp.com/showarticle.aspx?artno=88



struct GraphicsDeviceDesc {
	int deviceID;
	const char* name;
	int pixelFillrate;
};


static const GraphicsDeviceDesc kATIDevices[] = {
{ 0x3150, "Mobility Radeon X600 M24", 1600 },
{ 0x3151, "FireMV 2400 RV380", 1600 },
{ 0x3152, "Mobility Radeon X300 M24", 1600 },
{ 0x3154, "Mobility FireGL V3200 M24GL", 1600 },
{ 0x3171, "FireMV 2400 RV380", 1600 },
{ 0x3E50, "Radeon X600/X550 Series RV380", 1600 },
{ 0x3E54, "FireGL V3200 RV380GL", 1600 },
{ 0x3E70, "Radeon X600/X550 Series RV380", 1600 },
{ 0x3E74, "FireGL V3200 RV380GL", 1600 },
{ 0x4144, "Radeon 9500 R300", 1100 },
{ 0x4146, "Radeon 9600TX R300", 1100 },
{ 0x4147, "FireGL Z1 R300GL", 1100 },
{ 0x4148, "Radeon 9800 SE R350", 1300 },
{ 0x4149, "Radeon 9500 R350", 1300 },
{ 0x4150, "Radeon 9600 Series RV350", 1300 },
{ 0x4151, "Radeon 9600 Series RV350", 1300 },
{ 0x4152, "Radeon 9600 Series RV360", 1600 },
{ 0x4153, "Radeon 9550/X1050 Series RV350", 1000 },
{ 0x4154, "FireGL T2 RV350GL", 1300 },
{ 0x4155, "Radeon 9600 Series RV350", 1300 },
{ 0x4164, "Radeon 9500 R300", 1100 },
{ 0x4166, "Radeon 9600TX R300", 1100 },
{ 0x4167, "FireGL Z1 R300GL", 1100 },
{ 0x4168, "Radeon 9800 SE R350", 1300 },
{ 0x4169, "Radeon 9500 R350", 1300 },
{ 0x4170, "Radeon 9600 Series RV350", 1300 },
{ 0x4171, "Radeon 9600 Series RV350", 1300 },
{ 0x4172, "Radeon 9600 Series RV360", 1600 },
{ 0x4173, "Radeon 9550/X1050 Series RV350", 1000 },
{ 0x4174, "FireGL T2 RV350GL", 1300 },
{ 0x4175, "Radeon 9600 Series RV350", 1000 },
{ 0x4966, "Radeon 9000 Series", 1000 },
{ 0x4A48, "Radeon X800 Series R420", 3800 },
{ 0x4A49, "Radeon X800 PRO R420", 5700 },
{ 0x4A4A, "Radeon X800 Series R420", 3800 },
{ 0x4A4B, "Radeon X800 XT R420", 8000 },
{ 0x4A4C, "Radeon X800 Series R420", 3800 },
{ 0x4A4D, "FireGL X3-256 R420GL", 3800 },
{ 0x4A4E, "Mobility Radeon 9800 M18", 2800 },
{ 0x4A4F, "Radeon X800 SE R420", 3400 },
{ 0x4A50, "Radeon X800 XT Platinum Edition R420", 8320 },
{ 0x4A54, "Radeon X800 VE R420", 1700 },
{ 0x4A68, "Radeon X800 Series R420", 3800 },
{ 0x4A69, "Radeon X800 PRO R420", 5700 },
{ 0x4A6A, "Radeon X800 Series R420", 3800 },
{ 0x4A6B, "Radeon X800 XT R420", 8000 },
{ 0x4A6C, "Radeon X800 Series R420", 3800 },
{ 0x4A6D, "FireGL X3-256 R420GL", 3800 },
{ 0x4A6F, "Radeon X800 SE R420", 3400 },
{ 0x4A70, "Radeon X800 XT Platinum Edition R420", 8320 },
{ 0x4A74, "Radeon X800 VE R420", 1700 },
{ 0x4B49, "Radeon X850 XT R481", 8320 },
{ 0x4B4A, "Radeon X850 SE R481", 3400 },
{ 0x4B4B, "Radeon X850 PRO R481", 6240 },
{ 0x4B4C, "Radeon X850 XT Platinum Edition R481", 8640 },
{ 0x4B69, "Radeon X850 XT R481", 8320 },
{ 0x4B6A, "Radeon X850 SE R481", 3400 },
{ 0x4B6B, "Radeon X850 PRO R481", 6240 },
{ 0x4B6C, "Radeon X850 XT Platinum Edition R481", 8640 },
{ 0x4C66, "Mobility Radeon 9000", 1000 },
{ 0x4E44, "Radeon 9700 PRO R300", 2600 },
{ 0x4E45, "Radeon 9500 PRO / 9700 R300", 2200 },
{ 0x4E46, "Radeon 9600 TX R300", 1100 },
{ 0x4E47, "FireGL X1 R300GL", 1100 },
{ 0x4E48, "Radeon 9800 PRO R350", 3040 },
{ 0x4E49, "Radeon 9800 R350", 2600 },
{ 0x4E4A, "Radeon 9800 XT R360", 3296 },
{ 0x4E4B, "FireGL X2-256/X2-256t R350GL", 2600 },
{ 0x4E50, "Mobility Radeon 9600/9700 Series M10", 1200 },
{ 0x4E51, "Radeon 9600 Series RV350", 1300 },
{ 0x4E52, "Mobility Radeon 9500 M10", 840 },
{ 0x4E54, "Mobility FIRE GL T2/T2e M10GL", 840 },
{ 0x4E56, "Mobility Radeon 9550 M12", 840 },
{ 0x4E64, "Radeon 9700 PRO R300", 2600 },
{ 0x4E65, "Radeon 9500 PRO / 9700 R300", 2200 },
{ 0x4E66, "Radeon 9600 TX R300", 1100 },
{ 0x4E67, "FireGL X1 R300GL", 1100 },
{ 0x4E68, "Radeon 9800 PRO R350", 3040 },
{ 0x4E69, "Radeon 9800 R350", 2600 },
{ 0x4E6A, "Radeon 9800 XT R360", 3296 },
{ 0x4E6B, "FireGL X2-256/X2-256t R350GL", 2600 },
{ 0x4E71, "Radeon 9600 Series RV350", 1300 },
{ 0x5460, "Mobility Radeon X300 M22", 1400 },
{ 0x5461, "Mobility Radeon X300 M22", 1400 },
{ 0x5462, "Mobility Radeon X600 SE M24C", 1600 },
{ 0x5464, "Mobility FireGL V3100 M22GL", 1400 },
{ 0x5548, "Radeon X800 Series R423", 4800 },
{ 0x5549, "Radeon X800 GTO R423", 6400 },
{ 0x554A, "Radeon X800 XT Platinum Edition R423", 8320 },
{ 0x554B, "Radeon X800 GT R423", 3600 },
{ 0x554D, "Radeon X800 XL R430", 6400 },
{ 0x554E, "Radeon X800 GT R430", 3800 },
{ 0x554F, "Radeon X800 GTO R430", 3800 },
{ 0x5550, "FireGL V7100 R423GL", 4800 },
{ 0x5551, "FireGL V5100 R423GL", 4800 },
{ 0x5568, "Radeon X800 Series R423", 4800 },
{ 0x5569, "Radeon X800 GTO R423", 6400 },
{ 0x556A, "Radeon X800 XT Platinum Edition R423", 8320 },
{ 0x556B, "Radeon X800 GT R423", 3600 },
{ 0x556D, "Radeon X800 XL R430", 6400 },
{ 0x556E, "Radeon X800 GT R430", 3800 },
{ 0x556F, "Radeon X800 GTO R430", 3800 },
{ 0x5570, "FireGL V7100 R423GL", 4800 },
{ 0x5571, "FireGL V5100  R423GL", 4800 },
{ 0x564A, "Mobility FireGL V5000 M26GL", 1400 },
{ 0x564B, "Mobility FireGL V5000 M26GL", 1400 },
{ 0x564F, "Mobility Radeon X700 XL M26", 1400 },
{ 0x5652, "Mobility Radeon X700 M26", 1400 },
{ 0x5653, "Mobility Radeon X700 M26", 140 },
{ 0x5657, "Radeon X550/X700 Series RV410", 3200 },
{ 0x5673, "Mobility Radeon X700 M26", 1400 },
{ 0x5677, "Radeon X550/X700 Series RV410", 3200 },
{ 0x5835, "Mobility Radeon 9000 IGP", 1000 },
{ 0x5854, "Radeon Xpress Series RS480", 600 },
{ 0x5874, "Radeon Xpress Series RS482", 600 },
{ 0x5954, "Radeon Xpress Series RS480", 600 },
{ 0x5960, "Radeon 9250", 960 },
{ 0x5961, "Radeon 9000 Series", 1000 },
{ 0x5964, "Radeon 9200 Series", 1000 },
{ 0x5955, "Radeon Xpress Series RS480M", 600 },
{ 0x5974, "Radeon Xpress Series RS482", 600 },
{ 0x5975, "Radeon Xpress Series RS482M", 600 },
{ 0x5A41, "Radeon Xpress Series RS400", 600 },
{ 0x5A42, "Radeon Xpress Series RS400M", 600 },
{ 0x5A43, "Radeon Xpress Series RS400", 600 },
{ 0x5A61, "Radeon Xpress Series RC410", 800 },
{ 0x5A62, "Radeon Xpress Series RC410M", 800 },
{ 0x5A63, "Radeon Xpress Series RC410", 800 },
{ 0x5B60, "Radeon X300/X550/X1050 Series RV370", 1300 },
{ 0x5B62, "Radeon X600 Series RV380x", 1600 },
{ 0x5B63, "Radeon X300/X550/X1050 Series RV370", 1300 },
{ 0x5B64, "FireGL V3100 RV370GL", 1300 },
{ 0x5B65, "FireMV 2200 RV370", 1300 },
{ 0x5B70, "Radeon X300/X550/X1050 Series RV370", 1300 },
{ 0x5B72, "Radeon X600 Series RV380x", 1600 },
{ 0x5B73, "Radeon X300/X550/X1050 Series RV370", 1300 },
{ 0x5B74, "FireGL V3100 RV370GL", 1300 },
{ 0x5B75, "FireMV 2200 RV370", 1300 },
{ 0x5C61, "Mobility Radeon 9200", 1000 },
{ 0x5D48, "Mobility/Radeon X800 XT M28", 4800 },
{ 0x5D49, "Mobility FireGL V5100 M28GL", 4800 },
{ 0x5D4A, "Mobility Radeon X800 M28", 4800 },
{ 0x5D4D, "Radeon X850 XT Platinum Edition R480", 8640 },
{ 0x5D4F, "Radeon X800 GTO R480", 3800 },
{ 0x5D50, "FireGL V7200 R480GL", 3800 },
{ 0x5D52, "Radeon X850 XT R480", 8320 },
{ 0x5D57, "Radeon X800 XT R423", 8000 },
{ 0x5D6D, "Radeon X850 XT Platinum Edition R480", 8640 },
{ 0x5D6F, "Radeon X800 GTO R480", 3800 },
{ 0x5D70, "FireGL V7200 R480GL", 3800 },
{ 0x5D72, "Radeon X850 XT R480", 8320 },
{ 0x5D77, "Radeon X800 XT R423", 8000 },
{ 0x5E48, "FireGL V5000 RV410GL", 3200 },
{ 0x5E4A, "Radeon X700 XT RV410", 3800 },
{ 0x5E4B, "Radeon X700 PRO RV410", 3400 },
{ 0x5E4C, "Radeon X700 SE RV410", 3200 },
{ 0x5E4D, "Radeon X700 RV410", 3200 },
{ 0x5E4F, "Radeon X700/X550 Series RV410", 3200 },
{ 0x5E68, "FireGL V5000 RV410GL", 3200 },
{ 0x5E6A, "Radeon X700 XT RV410", 3800 },
{ 0x5E6B, "Radeon X700 PRO RV410", 3400 },
{ 0x5E6C, "Radeon X700 SE RV410", 3200 },
{ 0x5E6D, "Radeon X700 RV410", 3200 },
{ 0x5E6F, "Radeon X700/X550 Series RV410", 3200 },
{ 0x6704, "FirePro V7900", 23200 },
{ 0x6707, "FirePro V5900", 19200 },
{ 0x6718, "Radeon HD 6900 Series", 25600 },
{ 0x6719, "Radeon HD 6900 Series", 28200 },
{ 0x671D, "Radeon HD 6990", 39750 }, // 2xGPU, assume 1.5x perf
{ 0x6720, "Radeon HD 6970M", 21760 },
{ 0x6738, "Radeon HD 6800 Series", 25600 },
{ 0x6739, "Radeon HD 6800 Series", 25600 },
{ 0x673E, "Radeon HD 6700 Series", 12000 },
{ 0x6740, "Radeon HD 6770M", 5800 },
{ 0x6741, "Radeon HD 6750M", 4800 },
{ 0x6749, "FirePro V4900", 6400 },
{ 0x6758, "Radeon HD 6600 Series", 6400 },
{ 0x6759, "Radeon HD 6500 Series", 5200 },
{ 0x675B, "Radeon HD 7670", 6400 },
{ 0x675D, "Radeon HD 7570", 5200 },
{ 0x675F, "Radeon HD 5500 Series", 4400 },
{ 0x6760, "Radeon HD 6490M", 3200 },
{ 0x6770, "Radeon HD 6400 Series", 2750 },
{ 0x6778, "Radeon HD 7470", 2750 },
{ 0x6779, "Radeon HD 6450", 2750 },
{ 0x677B, "Radeon HD 7400 Series", 3000 },
{ 0x6798, "Radeon HD 7970", 29600 },
{ 0x6799, "Radeon HD 7990", 40000 }, // 2xGPU, assume 1.5x perf
{ 0x679A, "Radeon HD 7950", 25600 },
{ 0x679E, "Radeon HD 7800 Series", 27500 },
{ 0x6800, "Radeon HD 7970M", 27200 },
{ 0x6818, "Radeon HD 7800 Series", 27500 },
{ 0x6819, "Radeon HD 7800 Series", 27500 },
{ 0x683D, "Radeon HD 7700 Series", 15000 },
{ 0x683F, "Radeon HD 7700 Series", 15000 },
{ 0x6840, "Radeon HD 7600M Series", 4000 },
{ 0x6841, "Radeon HD 7500/7600M Series", 4000 },
{ 0x6843, "Radeon HD 7670M", 4800 },
{ 0x6850, "Radeon HD 7570", 5200 },
{ 0x6858, "Radeon HD 7400 Series", 3000 },
{ 0x6888, "FirePro V8800", 26400 },
{ 0x6889, "FirePro V7800", 22400 },
{ 0x688C, "FireStream 9370", 26400 },
{ 0x688D, "FireStream 9350", 22400 },
{ 0x6898, "Radeon HD 5800 Series", 23200 },
{ 0x6899, "Radeon HD 5800 Series", 23200 },
{ 0x689C, "Radeon HD 5900 Series", 32000 }, // 2xGPU, assume 1.5x perf
{ 0x689E, "Radeon HD 5800 Series", 23200 },
{ 0x68A0, "Mobility Radeon HD 5870", 11200 },
{ 0x68A1, "Radeon HD 5750", 11200 },
{ 0x68A8, "Radeon HD 6800M", 9200 },
{ 0x68A9, "FirePro V5800", 11200 },
{ 0x68B8, "Radeon HD 5700 Series", 11200 },
{ 0x68B9, "Radeon HD 5600 Series", 6200 },
{ 0x68BA, "Radeon HD 6700 Series", 12000 },
{ 0x68BE, "Radeon HD 5700 Series", 11200 },
{ 0x68BF, "Radeon HD 6700 Series", 12000 },
{ 0x68C0, "Radeon HD 5670", 6200 },
{ 0x68C1, "Mobility Radeon HD 5650", 4400 },
{ 0x68C8, "FirePro/FireGL V4800", 6200 },
{ 0x68C9, "FirePro V3800", 5200 },
{ 0x68D8, "Radeon HD 5600 Series", 6200 },
{ 0x68D9, "Radeon HD 5500 Series", 4400 },
{ 0x68DA, "Radeon HD 5500 Series", 4400 },
{ 0x68E0, "Mobility Radeon HD 5470", 3000 },
{ 0x68E1, "Mobility Radeon HD 5430", 2200 },
{ 0x68E4, "Mobility Radeon HD 6370", 3000 },
{ 0x68E5, "Radeon HD 6330M", 2000 },
{ 0x68FA, "Radeon HD 7350", 2000 },
{ 0x68F9, "Radeon HD 5400 Series", 2600 },
{ 0x7100, "Radeon X1800 Series R520", 8000 },
{ 0x7101, "Mobility Radeon X1800 XT M58", 8800 },
{ 0x7102, "Mobility Radeon X1800 M58", 5400 },
{ 0x7103, "Mobility FireGL V7200 M58GL", 5400 },
{ 0x7104, "FireGL V7200 R520GL", 9600 },
{ 0x7105, "FireGL V5300 R520GL", 2800 },
{ 0x7106, "Mobility FireGL V7100 M58GL", 5400 },
{ 0x7108, "Radeon X1800 Series R520", 8000 },
{ 0x7109, "Radeon X1800 Series R520", 8000 },
{ 0x710A, "Radeon X1800 Series R520", 8000 },
{ 0x710B, "Radeon X1800 Series R520", 8000 },
{ 0x710C, "Radeon X1800 Series R520", 8000 },
{ 0x710E, "FireGL V7300 R520GL", 9600 },
{ 0x710F, "FireGL V7350 R520GL", 9600 },
{ 0x7120, "Radeon X1800 Series R520", 8000 },
{ 0x7124, "FireGL V7200 R520GL", 9600 },
{ 0x7125, "FireGL V5300 R520GL", 2800 },
{ 0x7128, "Radeon X1800 Series R520", 8000 },
{ 0x7129, "Radeon X1800 Series R520", 8000 },
{ 0x712A, "Radeon X1800 Series R520", 8000 },
{ 0x712B, "Radeon X1800 Series R520", 8000 },
{ 0x712C, "Radeon X1800 Series R520", 8000 },
{ 0x712E, "FireGL V7300 R520GL", 9600 },
{ 0x712F, "FireGL V7350 R520GL", 9600 },
{ 0x7140, "Radeon X1600 Series RV515", 1800 },
{ 0x7142, "Radeon X1300/X1550 Series RV515", 1800 },
{ 0x7143, "Radeon X1550 Series RV515", 1800 },
{ 0x7145, "Mobility Radeon X1400 M54", 1780 },
{ 0x7146, "Radeon X1300 / X1550 Series RV515", 1800 },
{ 0x7147, "Radeon X1550 64-bit RV515", 1800 },
{ 0x7149, "Mobility Radeon X1300 M52", 1400 },
{ 0x714A, "Mobility Radeon X1300 M52", 1400 },
{ 0x714B, "Mobility Radeon X1300 M52", 1400 },
{ 0x714C, "Mobility Radeon X1300 M52", 1400 },
{ 0x714D, "Radeon X1300 Series RV515", 1800 },
{ 0x714E, "Radeon X1300 Series RV515PCI", 1800 },
{ 0x7152, "FireGL V3300 RV515GL", 1800 },
{ 0x7153, "FireGL V3350 RV515GL", 1800 },
{ 0x715E, "Radeon X1300 Series RV515", 1800 },
{ 0x715F, "Radeon X1550 64-bit RV515", 1800 },
{ 0x7160, "Radeon X1600 Series RV515", 1800 },
{ 0x7162, "Radeon X1300/X1550 Series RV515", 1800 },
{ 0x7163, "Radeon X1550 Series RV515", 1800 },
{ 0x7166, "Radeon X1300 / X1550 Series RV515", 1800 },
{ 0x7167, "Radeon X1550 64-bit RV515", 1800 },
{ 0x716D, "Radeon X1300 Series RV515", 1800 },
{ 0x716E, "Radeon X1300 Series RV515PCI", 1800 },
{ 0x7172, "FireGL V3300 RV515GL", 1800 },
{ 0x7173, "FireGL V3350 RV515GL", 1800 },
{ 0x717E, "Radeon X1300 Series RV515", 1800 },
{ 0x717F, "Radeon X1550 64-bit RV515", 1800 },
{ 0x7180, "Radeon X1300/X1550 Series RV515", 1800 },
{ 0x7181, "Radeon X1600 Series RV515", 1800 },
{ 0x7183, "Radeon X1300/X1550 Series RV515", 1800 },
{ 0x7186, "Mobility Radeon X1450 M54", 1800 },
{ 0x7187, "Radeon X1300/X1550 Series RV515", 1800 },
{ 0x7188, "Mobility Radeon X2300 M54", 1920 },
{ 0x718A, "Mobility Radeon X2300 M54", 1920 },
{ 0x718B, "Mobility Radeon X1350 M52", 1880 },
{ 0x718C, "Mobility Radeon X1350 M52", 1880 },
{ 0x718D, "Mobility Radeon X1450 M54", 2200 },
{ 0x718F, "Radeon X1300 Series RV515PCI", 1800 },
{ 0x7193, "Radeon X1550 Series RV515", 1800 },
{ 0x7196, "Mobility Radeon X1350 M52", 1800 },
{ 0x719B, "FireMV 2250 RV515", 1800 },
{ 0x719F, "Radeon X1550 64-bit RV515", 1800 },
{ 0x71A0, "Radeon X1300/X1550 Series RV515", 1800 },
{ 0x71A1, "Radeon X1600 Series RV515", 1800 },
{ 0x71A3, "Radeon X1300/X1550 Series RV515", 1800 },
{ 0x71A7, "Radeon X1300/X1550 Series RV515", 1800 },
{ 0x71AF, "Radeon X1300 Series RV515PCI", 1800 },
{ 0x71B3, "Radeon X1550 Series RV515", 1800 },
{ 0x71BB, "FireMV 2250 RV515", 1800 },
{ 0x71C0, "Radeon X1600 Series RV530", 2000 },
{ 0x71C1, "Radeon X1650 Series RV535", 2000 },
{ 0x71C2, "Radeon X1600 Series RV530", 2000 },
{ 0x71C3, "Radeon X1300 Series RV535", 2000 },
{ 0x71C4, "Mobility FireGL V5200 M56GL", 1800 },
{ 0x71C5, "Mobility Radeon X1600 M56", 1800 },
{ 0x71C6, "Radeon X1650 Series RV530", 2000 },
{ 0x71C7, "Radeon X1650 Series RV535", 2000 },
{ 0x71CD, "Radeon X1600 Series RV530", 2000 },
{ 0x71CE, "Radeon X1600 Pro / Radeon X1300 XT RV530", 2000 },
{ 0x71D2, "FireGL V3400 RV530GL", 2000 },
{ 0x71D4, "Mobility FireGL V5250 M56GL", 1800 },
{ 0x71D5, "Mobility Radeon X1700 M56", 1800 },
{ 0x71D6, "Mobility Radeon X1700 XT M56", 1800 },
{ 0x71DA, "FireGL V5200 RV530GL", 2000 },
{ 0x71DE, "Mobility Radeon X1700 M56", 1800 },
{ 0x71E0, "Radeon X1600 Series RV530", 2000 },
{ 0x71E1, "Radeon X1650 Series RV535", 2000 },
{ 0x71E2, "Radeon X1600 Series RV530", 2000 },
{ 0x71E3, "Radeon X1300 Series RV535", 2000 },
{ 0x71E6, "Radeon X1600 Series RV530", 2000 },
{ 0x71E7, "Radeon X1650 Series RV535", 2000 },
{ 0x71ED, "Radeon X1600 Series RV530", 2000 },
{ 0x71EE, "Radeon X1600 Pro / Radeon X1300 XT RV530", 2000 },
{ 0x71F2, "FireGL V3400 RV530GL", 2000 },
{ 0x71FA, "FireGL V5200 RV530GL", 2000 },
{ 0x7210, "Mobility Radeon HD 2300 M71", 1920 },
{ 0x7211, "Mobility Radeon HD 2300 M71", 1920 },
{ 0x7240, "Radeon X1950 Series R580", 6900 },
{ 0x7243, "Radeon X1900 Series R580", 6900 },
{ 0x7244, "Radeon X1950 Series R580", 6900 },
{ 0x7245, "Radeon X1900 Series R580", 6900 },
{ 0x7246, "Radeon X1900 Series R580", 6900 },
{ 0x7247, "Radeon X1900 Series R580", 6900 },
{ 0x7248, "Radeon X1900 Series R580", 6900 },
{ 0x7249, "Radeon X1900 Series R580", 6900 },
{ 0x724A, "Radeon X1900 Series R580", 6900 },
{ 0x724B, "Radeon X1900 Series R580", 6900 },
{ 0x724C, "Radeon X1900 Series R580", 6900 },
{ 0x724D, "Radeon X1900 Series R580", 6900 },
{ 0x724E, "FireStream 2U R580", 6900 },
{ 0x724F, "Radeon X1900 Series R580", 6900 },
{ 0x7260, "Radeon X1950 Series R580", 6900 },
{ 0x7263, "Radeon X1900 Series R580", 6900 },
{ 0x7264, "Radeon X1950 Series R580", 6900 },
{ 0x7265, "Radeon X1900 Series R580", 6900 },
{ 0x7266, "Radeon X1900 Series R580", 6900 },
{ 0x7267, "Radeon X1900 Series R580", 6900 },
{ 0x7268, "Radeon X1900 Series R580", 6900 },
{ 0x7269, "Radeon X1900 Series R580", 6900 },
{ 0x726A, "Radeon X1900 Series R580", 6900 },
{ 0x726B, "Radeon X1900 Series R580", 6900 },
{ 0x726C, "Radeon X1900 Series R580", 6900 },
{ 0x726D, "Radeon X1900 Series R580", 6900 },
{ 0x726E, "FireStream 2U R580", 6900 },
{ 0x726F, "Radeon X1900 Series R580", 6900 },
{ 0x7280, "Radeon X1950 Series R580", 6900 },
{ 0x7284, "Mobility Radeon X1900 M58", 5400 },
{ 0x7288, "Radeon X1950 GT R580", 6000 },
{ 0x7291, "Radeon X1650 Series R580", 2000 },
{ 0x7293, "Radeon X1650 Series R580", 2000 },
{ 0x72A0, "Radeon X1950 Series R580", 6900 },
{ 0x72A8, "Radeon X1950 GT R580", 6000 },
{ 0x72B1, "Radeon X1650 Series R580", 2000 },
{ 0x72B3, "Radeon X1650 Series R580", 2000 },
{ 0x7835, "Mobility Radeon 9000 IGP", 1000 },
{ 0x791E, "Radeon X1200 Series RS690", 700 },
{ 0x791F, "Radeon X1200 Series RS690M", 700 },
{ 0x793F, "Radeon Xpress 1200 Series RS600", 1000 },
{ 0x7941, "Radeon Xpress 1200 Series RS600", 1000 },
{ 0x7942, "Radeon Xpress 1200 Series RS600M", 1000 },
{ 0x796E, "Radeon 2100 RS690", 1000 },
{ 0x9400, "Radeon HD 2900 XT R600", 11900 },
{ 0x9401, "Radeon HD 2900 XT R600", 11900 },
{ 0x9402, "Radeon HD 2900 XT R600", 11900 },
{ 0x9403, "Radeon HD 2900 PRO R600", 9600 },
{ 0x9405, "Radeon HD 2900 GT R600", 7200 },
{ 0x940A, "FireGL V8650 R600GL", 11008 },
{ 0x940B, "FireGL V8600 R600GL", 11008 },
{ 0x940F, "FireGL V7600 R600GL", 9600 },
{ 0x9440, "Radeon HD 4870 RV770", 12000 },
{ 0x9441, "Radeon HD 4870 X2 RV700", 16000 }, // 2xGPU, assume 1.5x perf
{ 0x9442, "Radeon HD 4850 RV770", 10000 },
{ 0x9443, "Radeon HD 4850 X2 RV700", 15000 }, // 2xGPU, assume 1.5x perf
{ 0x9444, "FirePro V8750", 12000 },
{ 0x944A, "Radeon HD 4800 Series M98", 8000 },
{ 0x944B, "Radeon HD 4850 X2 M98", 1200 }, // 2xGPU, assume 1.5x perf
{ 0x944C, "Radeon HD 4830 RV770", 9200 },
{ 0x944E, "Radeon HD 4700 Series RV770", 6000 },
{ 0x9450, "AMD FireStream 9270 RV770", 6000 },
{ 0x9452, "AMD FireStream 9250 RV770", 6000 },
{ 0x9456, "FirePro V8700", 12000 },
{ 0x945A, "Radeon HD 4870 M98", 8800 },
{ 0x9460, "Radeon HD 4800 Series RV790", 11200 },
{ 0x9462, "Radeon HD 4800 Series RV790", 11200 },
{ 0x9490, "Radeon HD 4600 Series RV730", 5200 },
{ 0x9495, "Radeon HD 4600 Series RV730", 5200 },
{ 0x9480, "Radeon HD 4650 M96", 4000 },
{ 0x9488, "Radeon HD 4670 M96", 5400 },
{ 0x9498, "Radeon HD 4600 Series RV730", 5200 },
{ 0x949C, "FirePro V7750", 6400 },
{ 0x949E, "FirePro V5700", 2400 },
{ 0x949F, "FirePro V3750", 4400 },
{ 0x94A0, "Radeon Graphics Processor M97", 6400 },
{ 0x94A1, "Radeon Graphics Processor M97", 6400 },
{ 0x94A3, "FirePro M7740", 10400 },
{ 0x94B3, "Radeon HD 4770 RV740", 12000 },
{ 0x94B4, "Radeon HD 4700 Series RV740", 12000 },
{ 0x94B5, "Radeon HD 4770 RV740", 12000 },
{ 0x94C1, "Radeon HD 2400 XT RV610", 2800 },
{ 0x94C3, "Radeon HD 2400 Series RV610", 2100 },
{ 0x94C4, "Radeon HD 2400 PRO AGP RV610", 2400 },
{ 0x94C5, "Radeon HD 2400 LE RV610", 2100 },
{ 0x94C7, "Radeon HD 2350 RV610", 2100 },
{ 0x94C8, "Mobility Radeon HD 2400 XT M72", 2400 },
{ 0x94C9, "Mobility Radeon HD 2400 M72", 1800 },
{ 0x94CB, "Radeon E2400 M72", 1800 },
{ 0x94CC, "Radeon HD 2400 Series RV610", 2100 },
{ 0x9501, "Radeon HD 3690/3870/4750 RV630", 10700 },
{ 0x9504, "Mobility Radeon HD 3850 M76", 9280 },
{ 0x9505, "Radeon HD 3850/4750 RV630", 10700 },
{ 0x9506, "Mobility Radeon HD 3850 X2 M76", 13000 }, // 2xGPU, assume 1.5x perf
{ 0x9507, "Radeon HD 3830 RV630", 10700 },
{ 0x9508, "Mobility Radeon HD 3870 M76", 10560 },
{ 0x9509, "Mobility Radeon HD 3870 X2 M76", 15000 }, // 2xGPU, assume 1.5x perf
{ 0x950F, "Radeon HD 3870 X2 RV630", 18000 }, // 2xGPU, assume 1.5x perf
{ 0x9511, "FireGL V7700 RV630GL", 10700 },
{ 0x9513, "Radeon HD 3850 X2 RV630", 15000 }, // 2xGPU, assume 1.5x perf
{ 0x9515, "Radeon HD 3850", 10000 },
{ 0x9519, "AMD FireStream 9170 RV630", 10700 },
{ 0x9540, "Radeon HD 4590 R730", 4600 },
{ 0x954F, "Radeon HD 4300/4500 Series R710", 2300 },
{ 0x9552, "Radeon HD 4300 Series M92", 2000 },
{ 0x9553, "Radeon HD 4500 Series M92", 2200 },
{ 0x9555, "Radeon Graphics Processor M93", 2300 },
{ 0x9581, "Mobility Radeon HD 2600 M76", 2000 },
{ 0x9583, "Mobility Radeon HD 2600 XT M76", 2720 },
{ 0x9586, "Radeon HD 2600 XT AGP RV630", 3200 },
{ 0x9587, "Radeon HD 2600 Pro AGP RV630", 2400 },
{ 0x9588, "Radeon HD 2600 XT RV630", 3200 },
{ 0x9589, "Radeon HD 2600 PRO / 3610 RV630", 2400 },
{ 0x958A, "Radeon HD 2600 X2 Series RV630", 3200 }, // 2xGPU, assume 1.5x perf
{ 0x9593, "Mobility Radeon HD 3670", 2720 },
{ 0x958B, "Mobility  Radeon HD 2600 XT Gemini M76", 2720 },
{ 0x958C, "FireGL V5600 RV630GL", 2000 },
{ 0x958D, "FireGL V3600 RV630GL", 2000 },
{ 0x958E, "Radeon HD 2600 LE RV630", 2100 },
{ 0x9590, "Radeon HD 3600 Series RV630", 2900 },
{ 0x9591, "Radeon HD 3600 Series M76", 2900 },
{ 0x9593, "Mobility Radeon HD 3670", 2720 },
{ 0x9596, "Radeon HD 3600 Series RV630", 2900 },
{ 0x9597, "Radeon HD 3600 Series RV630", 2900 },
{ 0x9598, "Radeon HD 3600/3730/4570/4610 RV630", 2900 },
{ 0x9599, "Radeon HD 3600 Series RV630", 2900 },
{ 0x95C0, "Radeon HD 3400/3570/4250 RV610", 2400 },
{ 0x95C2, "Mobility Radeon HD 3430 M72", 1800 },
{ 0x95C4, "Mobility Radeon HD 3400 Series M72", 1800 },
{ 0x95C5, "Radeon HD 3400/3550/4250 RV610", 2400 },
{ 0x95C6, "Radeon HD 3450", 2400 },
{ 0x95C7, "Radeon HD 3430 RV610", 1600 },
{ 0x95CC, "FirePro V3700", 3200 },
{ 0x95CD, "FireMV 2450 RV610", 2000 },
{ 0x95CE, "FireMV 2260 RV610", 1600 },
{ 0x95CF, "FireMV 2260 / FirePro 2260", 1600 },
{ 0x9610, "Radeon HD 3200 Graphics RS780", 2000 },
{ 0x9611, "Radeon 3100 Graphics RS780", 1400 },
{ 0x9612, "Radeon HD 3200 Graphics RS780M", 2000 },
{ 0x9613, "Radeon 3100 Graphics RS780M", 1200 },
{ 0x9614, "Radeon HD 3300 Graphics RS780", 2000 },
{ 0x9616, "AMD 760G RS780", 1600 },
{ 0x9640, "Radeon 6550D", 4800 },
{ 0x9641, "Radeon 6620G", 3550 },
{ 0x9642, "Radeon 6370D", 1770 },
{ 0x9643, "Radeon 6380G", 1600 },
{ 0x9644, "Radeon 6410D", 2400 },
{ 0x9645, "Radeon 6410D", 2400 },
{ 0x9647, "Radeon 6520G", 3200 },
{ 0x9648, "Radeon 6480G", 1770 },
{ 0x9649, "Radeon 6480G", 1770 },
{ 0x964A, "Radeon 6530D", 3540 },
{ 0x9710, "Radeon HD 4200 RS880", 2000 },
{ 0x9712, "Mobility Radeon HD 4200 M880G", 2000 },
{ 0x9713, "Mobility Radeon HD 4100 M860G", 1000 },
{ 0x9714, "Radeon HD 4290 RS880", 2800 },
{ 0x9715, "Radeon HD 4250 RS880", 2240 },
{ 0x9802, "Radeon HD 6300 Series", 2000 },
{ 0x9803, "Radeon HD 6300 Series", 2000 },
{ 0x9804, "Radeon HD 6200 Series", 1120 },
{ 0x9805, "Radeon HD 6200 Series", 1120 },
{ 0x9806, "Radeon HD 6320", 2000 },
{ 0x9807, "Radeon HD 6290", 1120 },
{ 0x9809, "Radeon HD 7310", 2000 },
{ 0x9900, "Radeon HD 7660G", 4800 },
{ 0x9901, "Radeon HD 7660D", 6000 },
{ 0x9903, "Radeon HD 7640G", 4000 },
{ 0x9904, "Radeon HD 7560D", 6000 },
{ 0x9990, "Radeon HD 7520G", 3800 },
{ 0, 0, 0 },
};


static const GraphicsDeviceDesc kNVIDIADevices[] = {
{ 0x0020, "Riva TNT", 180 },
{ 0x0028, "Riva TNT2/TNT2 Pro", 286 },
{ 0x0029, "Riva TNT2 Ultra", 300 },
{ 0x002C, "Vanta/Vanta LT", 160 },
{ 0x002D, "Riva TNT2 Model 64/Model 64 Pro", 250 },
{ 0x0040, "GeForce 6800 Ultra", 6400 },
{ 0x0041, "GeForce 6800", 3200 },
{ 0x0042, "GeForce 6800 LE", 2600 },
{ 0x0043, "GeForce 6800 XE", 2600 },
{ 0x0044, "GeForce 6800 XT", 2600 },
{ 0x0045, "GeForce 6800 GT", 5600 },
{ 0x0046, "GeForce 6800 GT", 5600 },
{ 0x0047, "GeForce 6800 GS", 3600 },
{ 0x0048, "GeForce 6800 XT", 2600 },
{ 0x0049, "NV40GL", 3000 },
{ 0x004D, "Quadro FX 3400", 5600 },
{ 0x004E, "Quadro FX 4000", 3000 },
{ 0x0090, "GeForce 7800 GTX", 6880 },
{ 0x0091, "GeForce 7800 GTX", 6880 },
{ 0x0092, "GeForce 7800 GT", 6400 },
{ 0x0093, "GeForce 7800 GS", 3000 },
{ 0x0095, "GeForce 7800 SLI", 7200 }, // 2xGPU, assume 1.5x perf
{ 0x0098, "GeForce Go 7800", 3200 },
{ 0x0099, "GeForce Go 7800 GTX", 6400 },
{ 0x009D, "Quadro FX 4500", 7520 },
{ 0x00A0, "Aladdin TNT2", 286 },
{ 0x00C0, "GeForce 6800 GS", 3600 },
{ 0x00C1, "GeForce 6800", 3200 },
{ 0x00C2, "GeForce 6800 LE", 2600 },
{ 0x00C3, "GeForce 6800 XT", 2600 },
{ 0x00C8, "GeForce Go 6800", 3600 },
{ 0x00C9, "GeForce Go 6800 Ultra", 5400 },
{ 0x00CC, "Quadro FX Go1400", 2000 },
{ 0x00CD, "Quadro FX 3450/4000 SDI", 3400 },
{ 0x00CE, "Quadro FX 1400", 2800 },
{ 0x00F0, "GeForce 6800", 3200 },
{ 0x00F1, "GeForce 6600 GT", 2000 },
{ 0x00F2, "GeForce 6600", 1200 },
{ 0x00F3, "GeForce 6200", 600 },
{ 0x00F4, "GeForce 6600 LE", 1200 },
{ 0x00F5, "GeForce 7800 GS", 3000 },
{ 0x00F6, "GeForce 6800 GS/XT", 2800 },
{ 0x00F8, "Quadro FX 3400/4400", 5600 },
{ 0x00F9, "GeForce 6800 Series GPU", 3200 },
{ 0x00FA, "GeForce PCX 5750", 1700 },
{ 0x00FB, "GeForce PCX 5900", 3400 },
{ 0x00FC, "GeForce PCX 5300", 1000 },
{ 0x00FD, "Quadro NVS 280 PCI-E", -1 },
{ 0x00FE, "Quadro FX 1300", 2800 },
{ 0x00FF, "GeForce PCX 4300", -1 },
{ 0x0100, "GeForce 256", 480 },
{ 0x0101, "GeForce DDR", 480 },
{ 0x0103, "Quadro", -1 },
{ 0x0110, "GeForce2 MX/MX 400", 400 },
{ 0x0111, "GeForce2 MX 100/200", 300 },
{ 0x0112, "GeForce2 Go", -1 },
{ 0x0140, "GeForce 6600 GT", 2000 },
{ 0x0141, "GeForce 6600", 1200 },
{ 0x0142, "GeForce 6600 LE", 1200 },
{ 0x0143, "GeForce 6600 VE", 1200 },
{ 0x0144, "GeForce Go 6600", 3000 },
{ 0x0145, "GeForce 6610 XL", 2100 },
{ 0x0146, "GeForce Go 6600 TE/6200 TE", 1600 },
{ 0x0147, "GeForce 6700 XL", 2100 },
{ 0x0148, "GeForce Go 6600", 3000 },
{ 0x0149, "GeForce Go 6600 GT", 3000 },
{ 0x014A, "Quadro NVS 440", -1 },
{ 0x014B, "NV43", -1 },
{ 0x014C, "Quadro FX 540M", -1 },
{ 0x014D, "Quadro FX 550", 2880 },
{ 0x014E, "Quadro FX 540", 2400 },
{ 0x014F, "GeForce 6200", 600 },
{ 0x0150, "GeForce2 GTS/GeForce2 Pro", 800 },
{ 0x0151, "GeForce2 Ti", 1000 },
{ 0x0152, "GeForce2 Ultra", 1000 },
{ 0x0153, "Quadro2 Pro", -1 },
{ 0x0160, "GeForce 6500", 1400 },
{ 0x0161, "GeForce 6200 TurboCache", 700 },
{ 0x0162, "GeForce 6200SE TurboCache", 700 },
{ 0x0163, "GeForce 6200 LE", 350 },
{ 0x0164, "GeForce Go 6200", 1200 },
{ 0x0165, "Quadro NVS 285", 700 },
{ 0x0166, "GeForce Go 6400", 1600 },
{ 0x0167, "GeForce Go 6200", 1200 },
{ 0x0168, "GeForce Go 6400", 1600 },
{ 0x0169, "GeForce 6250", 700 },
{ 0x016A, "GeForce 7100 GS", 700 },
{ 0x016B, "NV44GLM", -1 },
{ 0x016C, "NV44GLM", -1 },
{ 0x016D, "NV44GLM", -1 },
{ 0x016E, "NV44GL", -1 },
{ 0x0170, "GeForce4 MX 460", 600 },
{ 0x0171, "GeForce4 MX 440", 550 },
{ 0x0172, "GeForce4 MX 420", 500 },
{ 0x0173, "GeForce4 MX 440-SE", 550 },
{ 0x0174, "GeForce4 440 Go", -1 },
{ 0x0175, "GeForce4 420 Go", -1 },
{ 0x0176, "GeForce4 420 Go 32M", -1 },
{ 0x0177, "GeForce4 460 Go", -1 },
{ 0x0178, "Quadro4 550 XGL", -1 },
{ 0x0179, "GeForce4 440 Go 64M", -1 },
{ 0x017A, "Quadro NVS", -1 },
{ 0x017C, "Quadro4 500 GoGL", -1 },
{ 0x017D, "GeForce4 410 Go 16M", -1 },
{ 0x0181, "GeForce4 MX 440 with AGP8X", 550 },
{ 0x0182, "GeForce4 MX 440SE with AGP8X", 550 },
{ 0x0183, "GeForce4 MX 420 with AGP8X", 500 },
{ 0x0185, "GeForce4 MX 4000", 550 },
{ 0x0186, "GeForce4 448 Go", -1 },
{ 0x0187, "GeForce4 488 Go", -1 },
{ 0x0188, "Quadro4 580 XGL", -1 },
{ 0x018A, "Quadro NVS with AGP8X", -1 },
{ 0x018B, "Quadro4 380 XGL", -1 },
{ 0x018C, "Quadro NVS 50 PCI", -1 },
{ 0x018D, "GeForce4 448 Go", -1 },
{ 0x0191, "GeForce 8800 GTX", 13800 },
{ 0x0193, "GeForce 8800 GTS", 10400 },
{ 0x0194, "GeForce 8800 Ultra", 14688 },
{ 0x0197, "Tesla C870", -1 },
{ 0x019D, "Quadro FX 5600", 14400 },
{ 0x019E, "Quadro FX 4600", 12000 },
{ 0x01A0, "GeForce2 Integrated GPU", -1 },
{ 0x01D0, "GeForce 7350 LE", 1100 },
{ 0x01D1, "GeForce 7300 LE", 900 },
{ 0x01D2, "GeForce 7550 LE", 1200 },
{ 0x01D3, "GeForce 7300 SE", 900 },
{ 0x01D4, "GeForce Go 7350", 800 },
{ 0x01D6, "GeForce Go 7200", 450 },
{ 0x01D7, "GeForce Go 7300", 700 },
{ 0x01D8, "GeForce Go 7400", 900 },
{ 0x01D9, "GeForce Go 7450", 1000 },
{ 0x01DA, "Quadro NVS 110M", 600 },
{ 0x01DB, "Quadro NVS 120M", 900 },
{ 0x01DC, "Quadro FX 350M", 900 },
{ 0x01DD, "GeForce 7500 LE", 1100 },
{ 0x01DE, "Quadro FX 350", -1 },
{ 0x01DF, "GeForce 7300 GS", 1100 },
{ 0x01F0, "GeForce4 MX Integrated GPU", -1 },
{ 0x0200, "GeForce3", 800 },
{ 0x0201, "GeForce3 Ti 200", 700 },
{ 0x0202, "GeForce3 Ti 500", 960 },
{ 0x0203, "Quadro DCC", -1 },
{ 0x0211, "GeForce 6800", 3200 },
{ 0x0212, "GeForce 6800 LE", 2600 },
{ 0x0215, "GeForce 6800 GT", 5600 },
{ 0x0218, "GeForce 6800 XT", 2600 },
{ 0x0220, "NV44", -1 },
{ 0x0221, "GeForce 6200", 600 },
{ 0x0222, "GeForce 6200 A-LE", 350 },
{ 0x0228, "NV44M", -1 },
{ 0x0240, "GeForce 6150", 475 },
{ 0x0241, "GeForce 6150 LE", 425 },
{ 0x0242, "GeForce 6100", 425 },
{ 0x0244, "GeForce Go 6150", 425 },
{ 0x0245, "Quadro NVS 210S / GeForce 6150LE", 425 },
{ 0x0247, "GeForce Go 6100", 425 },
{ 0x0250, "GeForce4 Ti 4600", 1200 },
{ 0x0251, "GeForce4 Ti 4400", 1100 },
{ 0x0252, "NV25", 2200 },
{ 0x0253, "GeForce4 Ti 4200", 1000 },
{ 0x0258, "Quadro4 900 XGL", 2400 },
{ 0x0259, "Quadro4 750 XGL", 2200 },
{ 0x025B, "Quadro4 700 XGL", 2200 },
{ 0x0280, "GeForce4 Ti 4800", 1200 },
{ 0x0281, "GeForce4 Ti 4200 with AGP8X", 1000 },
{ 0x0282, "GeForce4 Ti 4800 SE", 1100 },
{ 0x0286, "GeForce4 4200 Go", -1 },
{ 0x0288, "Quadro4 980 XGL", 2400 },
{ 0x0289, "Quadro4 780 XGL", -1 },
{ 0x028C, "Quadro4 700 GoGL", -1 },
{ 0x0290, "GeForce 7900 GTX", 10400 },
{ 0x0291, "GeForce 7900 GT/GTO", 7200 },
{ 0x0292, "GeForce 7900 GS", 7200 },
{ 0x0293, "GeForce 7950 GX2", 16000 },
{ 0x0294, "GeForce 7950 GX2", 16000 },
{ 0x0295, "GeForce 7950 GT", 8800 },
{ 0x0297, "GeForce Go 7950 GTX", 9200 },
{ 0x0298, "GeForce Go 7900 GS", 6000 },
{ 0x0299, "GeForce Go 7900 GTX", 8000 },
{ 0x029A, "Quadro FX 2500M", 8000 },
{ 0x029B, "Quadro FX 1500M", 6000 },
{ 0x029C, "Quadro FX 5500", 11200 },
{ 0x029D, "Quadro FX 3500", 7520 },
{ 0x029E, "Quadro FX 1500", 6000 },
{ 0x029F, "Quadro FX 4500 X2", 15040 },
{ 0x02E0, "GeForce 7600 GT", 4480 },
{ 0x02E1, "GeForce 7600 GS", 3200 },
{ 0x02E2, "GeForce 7300 GT", 2800 },
{ 0x02E3, "GeForce 7900 GS", 7200 },
{ 0x02E4, "GeForce 7950 GT", 8800 },
{ 0x0301, "GeForce FX 5800 Ultra", 4000 },
{ 0x0302, "GeForce FX 5800", 3200 },
{ 0x0308, "Quadro FX 2000", -1 },
{ 0x0309, "Quadro FX 1000", -1 },
{ 0x0311, "GeForce FX 5600 Ultra", 1400 },
{ 0x0312, "GeForce FX 5600", 1300 },
{ 0x0313, "NV31", -1 },
{ 0x0314, "GeForce FX 5600XT", 940 },
{ 0x0316, "NV31M", 1400 },
{ 0x0317, "NV31M Pro", 1400 },
{ 0x031A, "GeForce FX Go5600", 1400 },
{ 0x031B, "GeForce FX Go5650", 1400 },
{ 0x031C, "Quadro FX Go700", -1 },
{ 0x031D, "NV31GLM", -1 },
{ 0x031E, "NV31GLM Pro", -1 },
{ 0x031F, "NV31GLM Pro", -1 },
{ 0x0320, "GeForce FX 5200", 1000 },
{ 0x0321, "GeForce FX 5200 Ultra", 1300 },
{ 0x0322, "GeForce FX 5200", 1000 },
{ 0x0323, "GeForce FX 5200LE", 800 },
{ 0x0324, "GeForce FX Go5200", 1200 },
{ 0x0325, "GeForce FX Go5250", 1200 },
{ 0x0326, "GeForce FX 5500", 1080 },
{ 0x0327, "GeForce FX 5100", 1000 },
{ 0x0328, "GeForce FX Go5200 32M/64M", 1000 },
{ 0x0329, "NV34MAP", 1800 },
{ 0x032A, "Quadro NVS 280 PCI", -1 },
{ 0x032B, "Quadro FX 500/FX 600", 1000 },
{ 0x032C, "GeForce FX Go53xx", 1200 },
{ 0x032D, "GeForce FX Go5100", 1200 },
{ 0x032F, "NV34GL", 1000 },
{ 0x0330, "GeForce FX 5900 Ultra", 3600 },
{ 0x0331, "GeForce FX 5900", 3200 },
{ 0x0332, "GeForce FX 5900XT", 3200 },
{ 0x0333, "GeForce FX 5950 Ultra", 3800 },
{ 0x0334, "GeForce FX 5900ZT", -1 },
{ 0x0338, "Quadro FX 3000", -1 },
{ 0x033F, "Quadro FX 700", 1100 },
{ 0x0341, "GeForce FX 5700 Ultra", 1900 },
{ 0x0342, "GeForce FX 5700", 1700 },
{ 0x0343, "GeForce FX 5700LE", 1000 },
{ 0x0344, "GeForce FX 5700VE", 1200 },
{ 0x0345, "NV36", -1 },
{ 0x0347, "GeForce FX Go5700", 1800 },
{ 0x0348, "GeForce FX Go5700", 1800 },
{ 0x0349, "NV36M Pro", 1800 },
{ 0x034B, "NV36MAP", 1800 },
{ 0x034C, "Quadro FX Go1000", -1 },
{ 0x034E, "Quadro FX 1100", 1700 },
{ 0x034F, "NV36GL", 1700 },
{ 0x038B, "GeForce 7650 GS", 3600 },
{ 0x0390, "GeForce 7650 GS", 3600 },
{ 0x0391, "GeForce 7600 GT", 4480 },
{ 0x0392, "GeForce 7600 GS", 3200 },
{ 0x0393, "GeForce 7300 GT", 2800 },
{ 0x0394, "GeForce 7600 LE", 2800 },
{ 0x0395, "GeForce 7300 GT", 2800 },
{ 0x0397, "GeForce Go 7700", 3600 },
{ 0x0398, "GeForce Go 7600", 3600 },
{ 0x0399, "GeForce Go 7600 GT", 4000 },
{ 0x039A, "Quadro NVS 300M", 900 },
{ 0x039F, "GeForce GTX 260", 16128 },
{ 0x039B, "GeForce Go 7900 SE", 3600 },
{ 0x039C, "Quadro FX 560M", -1 },
{ 0x039E, "Quadro FX 560", 2800 },
{ 0x03D0, "GeForce 6150SE nForce 430", 425 },
{ 0x03D1, "GeForce 6100 nForce 405", 425 },
{ 0x03D2, "GeForce 6100 nForce 400", 425 },
{ 0x03D5, "GeForce 6100 nForce 420", 425 },
{ 0x03D6, "GeForce 7025 / nForce 630a", 850 },
{ 0x0400, "GeForce 8600 GTS", 5400 },
{ 0x0401, "GeForce 8600 GT", 4320 },
{ 0x0402, "GeForce 8600 GT", 4320 },
{ 0x0403, "GeForce 8600 GS", 4320 },
{ 0x0404, "GeForce 8400 GS", 1800 },
{ 0x0405, "GeForce 9500M GS", 3800 },
{ 0x0406, "GeForce 8300 GS", 1800 },
{ 0x0407, "GeForce 8600M GT", 3800 },
{ 0x0408, "GeForce 8600M GTS", 3800 },
{ 0x0409, "GeForce 8700M GT", 5000 },
{ 0x040A, "Quadro FX 370", 1440 },
{ 0x040B, "Quadro NVS 320M", 4600 },
{ 0x040C, "Quadro FX 570M", 3800 },
{ 0x040D, "Quadro FX 1600M", 5000 },
{ 0x040E, "Quadro FX 570", 3680 },
{ 0x040F, "Quadro FX 1700", 3680 },
{ 0x0410, "GeForce GT 330", 4320 },
{ 0x0420, "GeForce 8400 SE", 1400 },
{ 0x0421, "GeForce 8500 GT", 3600 },
{ 0x0422, "GeForce 8400 GS", 1800 },
{ 0x0423, "GeForce 8300 GS", 1800 },
{ 0x0424, "GeForce 8400 GS", 1800 },
{ 0x0425, "GeForce 8600M GS", 2400 },
{ 0x0426, "GeForce 8400M GT", 1800 },
{ 0x0427, "GeForce 8400M GS", 1600 },
{ 0x0428, "GeForce 8400M G", 1600 },
{ 0x0429, "Quadro NVS 140M", 1600 },
{ 0x042A, "Quadro NVS 130M", 1400 },
{ 0x042B, "Quadro NVS 135M", 1600 },
{ 0x042C, "GeForce 9400 GT", 2200 },
{ 0x042D, "Quadro FX 360M", 1600 },
{ 0x042E, "GeForce 9300M G", 1600 },
{ 0x042F, "Quadro NVS 290", 1840 },
{ 0x0530, "GeForce 7190M / nForce 650M", 900 },
{ 0x0531, "GeForce 7150M / nForce 630M", 850 },
{ 0x0532, "MCP67M", 750 },
{ 0x0533, "GeForce 7000M / nForce 610M", 700 },
{ 0x053A, "GeForce 7050 PV / nForce 630a", 850 },
{ 0x053B, "GeForce 7050 PV / nForce 630a", 850 },
{ 0x053E, "GeForce 7025 / nForce 630a", 850 },
{ 0x053F, "MCP67M", 750 },
{ 0x05E0, "GeForce GTX 295", 24000 }, // 2xGPU, assume 1.5x perf
{ 0x05E1, "GeForce GTX 280", 19264 },
{ 0x05E2, "GeForce GTX 260", 16128 },
{ 0x05E3, "GeForce GTX 285", 20736 },
{ 0x05E6, "GeForce GTX 275", 17724 },
{ 0x05E7, "Tesla C1060/T10", -1 },
{ 0x05EA, "GeForce GTX 260", 16128 },
{ 0x05EB, "GeForce GTX 295", 24000 }, // 2xGPU, assume 1.5x perf
{ 0x05ED, "Quadroplex 2200 D2", -1 },
{ 0x05F8, "Quadroplex 2200 S4", -1 },
{ 0x05F9, "Quadro CX", 14448 },
{ 0x05FD, "Quadro FX 5800", 20736 },
{ 0x05FE, "Quadro FX 4800", 14448 },
{ 0x05FF, "Quadro FX 3800", 9632 },
{ 0x0600, "GeForce 8800 GTS 512", 10400 },
{ 0x0601, "GeForce 9800 GT", 9600 },
{ 0x0602, "GeForce 8800 GT", 9600 },
{ 0x0603, "GeForce GT 230", 8000 },
{ 0x0604, "GeForce 9800 GX2", 14000 }, // 2xGPU, assume 1.5x of one card
{ 0x0605, "GeForce 9800 GT", 9600 },
{ 0x0606, "GeForce 8800 GS", 6600 },
{ 0x0607, "GeForce GTS 240", 10800 },
{ 0x0608, "GeForce 9800M GTX", 8000 },
{ 0x0609, "GeForce 8800M GTS", 8000 },
{ 0x060A, "GeForce GTX 280M", 9360 },
{ 0x060B, "GeForce 9800M GT", 8000 },
{ 0x060C, "GeForce 8800M GTX", 8000 },
{ 0x060D, "GeForce 8800 GS", 6600 },
{ 0x060F, "GeForce GTX 285M", 9600 },
{ 0x0610, "GeForce 9600 GSO", 6600 },
{ 0x0611, "GeForce 8800 GT", 9600 },
{ 0x0612, "GeForce 9800 GTX/9800 GTX+", 10800 },
{ 0x0613, "GeForce 9800 GTX+", 11808 },
{ 0x0614, "GeForce 9800 GT", 9600 },
{ 0x0615, "GeForce GTS 250", 11808 },
{ 0x0617, "GeForce 9800M GTX", 8000 },
{ 0x0618, "GeForce GTX 260M", 8800 },
{ 0x0619, "Quadro FX 4700 X2", 12000 }, // 2xGPU, assume 1.5x perf
{ 0x061A, "Quadro FX 3700", 12720 },
{ 0x061B, "Quadro VX 200", 12720 },
{ 0x061C, "Quadro FX 3600M", 8000 },
{ 0x061D, "Quadro FX 2800M", 8000 },
{ 0x061E, "Quadro FX 3700M", 8800 },
{ 0x061F, "Quadro FX 3800M", 10800 },
{ 0x0621, "GeForce GT 230", 8000 },
{ 0x0622, "GeForce 9600 GT", 10400 },
{ 0x0623, "GeForce 9600 GS", 6000 },
{ 0x0624, "G94", -1 },
{ 0x0625, "GeForce 9600 GSO 512", 10400 },
{ 0x0626, "GeForce GT 130", 6000 },
{ 0x0627, "GeForce GT 140", 10400 },
{ 0x0628, "GeForce 9800M GTS", 9600 },
{ 0x062A, "GeForce 9700M GTS", 8480 },
{ 0x062B, "GeForce 9800M GT", 8000 },
{ 0x062C, "GeForce 9800M GTS", 8000 },
{ 0x062D, "GeForce 9600 GT", 10400 },
{ 0x062E, "GeForce 9600 GT", 10400 },
{ 0x062F, "GeForce 9800 S", 9600 },
{ 0x0630, "GeForce 9700 S", 9600 },
{ 0x0631, "GeForce GTS 160M", 9600 },
{ 0x0632, "GeForce GTS 150M", 6400 },
{ 0x0635, "GeForce 9600 GSO", 6600 },
{ 0x0637, "GeForce 9600 GT", 10400 },
{ 0x0638, "Quadro FX 1800", 6600 },
{ 0x063A, "Quadro FX 2700M", 8480 },
{ 0x0638, "Quadro FX 1800", 6600 },
{ 0x0640, "GeForce 9500 GT", 4400 },
{ 0x0641, "GeForce 9400 GT", 2200 },
{ 0x0643, "GeForce 9500 GT", 4400 },
{ 0x0644, "GeForce 9500 GS", 4000 },
{ 0x0645, "GeForce 9500 GS", 4000 },
{ 0x0646, "GeForce GT 120", 4400 },
{ 0x0647, "GeForce 9600M GT", 4000 },
{ 0x0648, "GeForce 9600M GS", 3440 },
{ 0x0649, "GeForce 9600M GT", 4000 },
{ 0x064A, "GeForce 9700M GT", 5000 },
{ 0x064B, "GeForce 9500M G", 4000 },
{ 0x064C, "GeForce 9650M GT", 4400 },
{ 0x064E, "GeForce 9800 GT", 9600 },
{ 0x0650, "G96-825", -1 },
{ 0x0651, "GeForce G 110M", 1600 },
{ 0x0652, "GeForce GT 130M", 4800 },
{ 0x0653, "GeForce GT 120M", 4000 },
{ 0x0654, "GeForce GT 220M", 4000 },
{ 0x0655, "GeForce 9600 S / GT 120", 4400 },
{ 0x0658, "Quadro FX 380", 3600 },
{ 0x0659, "Quadro FX 580", 3600 },
{ 0x065A, "Quadro FX 1700M", 5000 },
{ 0x065B, "GeForce 9400 GT", 2200 },
{ 0x065C, "Quadro FX 770M", 4000 },
{ 0x065F, "GeForce G210", 2356 },
{ 0x06C0, "GeForce GTX 480", 33600 },
{ 0x06C4, "GeForce GTX 465", 19420 },
{ 0x06CA, "GeForce GTX 480M", 13600 },
{ 0x06CD, "GeForce GTX 470", 24280 },
{ 0x06D1, "Tesla C2050", -1 },
{ 0x06D2, "Tesla M2070", -1 },
{ 0x06D8, "Quadro 6000", 27552 },
{ 0x06D9, "Quadro 5000", 20530 },
{ 0x06DD, "Quadro 4000", 15200 },
{ 0x06DE, "Tesla S2050", -1 },
{ 0x06E0, "GeForce 9300 GE", 2160 },
{ 0x06E1, "GeForce 9300 GS", 2268 },
{ 0x06E2, "GeForce 8400", 1800 },
{ 0x06E3, "GeForce 8400 SE", 1800 },
{ 0x06E4, "GeForce 8400 GS", 2268 },
{ 0x06E5, "GeForce 9300M GS", 2200 },
{ 0x06E6, "GeForce G100", 2150 },
{ 0x06E7, "GeForce 9300 SE", 1800 },
{ 0x06E8, "GeForce 9200M GS", 2200 },
{ 0x06E9, "GeForce 9300M GS", 2200 },
{ 0x06EA, "Quadro NVS 150M", 2120 },
{ 0x06EB, "Quadro NVS 160M", 2320 },
{ 0x06EC, "GeForce G 105M", 2560 },
{ 0x06ED, "G98-GL", 2200 },
{ 0x06EF, "GeForce G 103M", 2560 },
{ 0x06F1, "GeForce G105M", 2560 },
{ 0x06F8, "Quadro NVS 420", 3300 }, // 2xGPU, 1.5x perf
{ 0x06F9, "Quadro FX 370 LP", 2160 },
{ 0x06FA, "Quadro NVS 450", 3300 }, // 2xGPU, 1.5x perf
{ 0x06FB, "Quadro FX 370M", 2200 },
{ 0x06FD, "Quadro NVS 295", 2200 },
{ 0x06FF, "HICx8/16 + Graphics", -1 },
{ 0x07E0, "GeForce 7150 / nForce 630i", 1260 },
{ 0x07E1, "GeForce 7100 / nForce 630i", 1200 },
{ 0x07E2, "GeForce 7050 / nForce 630i", 1000 },
{ 0x07E3, "GeForce 7050 / nForce 610i", 1000 },
{ 0x07E5, "GeForce 7050 / nForce 620i", 1000 },
{ 0x0844, "GeForce 9100M G", 1800 },
{ 0x0845, "GeForce 8200M G", 1600 },
{ 0x0846, "GeForce 9200", 2200 },
{ 0x0847, "GeForce 9100", 2000 },
{ 0x0848, "GeForce 8300", 2000 },
{ 0x0849, "GeForce 8200", 2000 },
{ 0x084A, "nForce 730a", -1 },
{ 0x084B, "GeForce 9200", 2200 },
{ 0x084C, "nForce 980a/780a SLI", -1 },
{ 0x084D, "nForce 750a SLI", -1 },
{ 0x084F, "GeForce 8100 / nForce 720a", 2000 },
{ 0x0860, "GeForce 9400", 2320 },
{ 0x0861, "GeForce 9400", 2320 },
{ 0x0862, "GeForce 9400M G", 1800 },
{ 0x0863, "GeForce 9400M", 1800 },
{ 0x0864, "GeForce 9300", 1800 },
{ 0x0865, "ION", 1800 },
{ 0x0866, "GeForce 9400M", 1800 },
{ 0x0867, "GeForce 9400", 2320 },
{ 0x0868, "nForce 760i SLI", 2320 },
{ 0x0869, "GeForce 9400", 2320 },
{ 0x086A, "GeForce 9400", 2320 },
{ 0x086C, "GeForce 9300 / nForce 730i", 1800 },
{ 0x086D, "GeForce 9200", 2200 },
{ 0x086E, "GeForce 9100M G", 1800 },
{ 0x086F, "GeForce 8200M G", 1600 },
{ 0x0870, "GeForce 9400M", 1800 },
{ 0x0871, "GeForce 9200", 2200 },
{ 0x0872, "GeForce G102M", 1800 },
{ 0x0873, "GeForce G102M", 1800 },
{ 0x0874, "ION", 1800 },
{ 0x0876, "ION", 1800 },
{ 0x087A, "GeForce 9400", 2320 },
{ 0x087D, "ION", 1800 },
{ 0x087E, "ION LE", 1600 },
{ 0x087F, "ION LE", 1600 },
{ 0x08A0, "GeForce 320M", 3600 },
{ 0x08A1, "MCP89-MZT", -1 },
{ 0x08A2, "GeForce 320M", 3600 },
{ 0x08A3, "GeForce 320M", 3600 },
{ 0x08A4, "GeForce 320M", 3600 },
{ 0x08B1, "GeForce 300M", 2000 },
{ 0x08B2, "GeForce 300M", 2000 },
{ 0x08B3, "MCP89 MM9", -1 },
{ 0x0A20, "GeForce GT 220", 5000 },
{ 0x0A21, "D10M2-20", -1 },
{ 0x0A22, "GeForce 315", 3800 },
{ 0x0A23, "GeForce 210", 2356 },
{ 0x0A26, "GeForce 405", 2356 },
{ 0x0A27, "GeForce 405", 2356 },
{ 0x0A28, "GeForce GT 230M", 4000 },
{ 0x0A29, "GeForce GT 330M", 4600 },
{ 0x0A2A, "GeForce GT 230M", 4000 },
{ 0x0A2B, "GeForce GT 330M", 4600 },
{ 0x0A2C, "NVS 5100M", 4400 },
{ 0x0A2D, "GeForce GT 320M", 4000 },
{ 0x0A30, "GeForce GT 330M", 4600 },
{ 0x0A34, "GeForce GT 240M", 4400 },
{ 0x0A35, "GeForce GT 325M", 3600 },
{ 0x0A38, "Quadro 400", 3600 },
{ 0x0A3C, "Quadro FX 880M", 4400 },
{ 0x0A60, "GeForce G210", 2356 },
{ 0x0A61, "D10M1-20", -1 },
{ 0x0A62, "GeForce 205", 2356 },
{ 0x0A63, "GeForce 310", 2356 },
{ 0x0A64, "ION", 1800 },
{ 0x0A65, "GeForce 210", 2356 },
{ 0x0A66, "GeForce 310", 2356 },
{ 0x0A67, "GeForce 315", 3800 },
{ 0x0A68, "GeForce G105M", 2560 },
{ 0x0A69, "GeForce G105M", 2560 },
{ 0x0A6A, "NVS 2100M", 2140 },
{ 0x0A6C, "NVS 3100M", 2400 },
{ 0x0A6E, "GeForce 305M", 2100 },
{ 0x0A6F, "ION", 1800 },
{ 0x0A70, "GeForce 310M", 2500 },
{ 0x0A71, "GeForce 305M", 2100 },
{ 0x0A72, "GeForce 310M", 2500 },
{ 0x0A73, "GeForce 305M", 2100 },
{ 0x0A74, "GeForce G210M", 2500 },
{ 0x0A75, "GeForce 310M", 2500 },
{ 0x0A76, "ION", 1800 },
{ 0x0A78, "Quadro FX 380 LP", 2356 },
{ 0x0A7A, "GeForce 315M", 2420 },
{ 0x0A7C, "Quadro FX 380M", 2500 },
{ 0x0CA0, "GeForce GT 330", 4320 },
{ 0x0CA2, "GeForce GT 320", 4320 },
{ 0x0CA3, "GeForce GT 240", 4400 },
{ 0x0CA4, "GeForce GT 340", 4400 },
{ 0x0CA5, "GT 220", 5000 },
{ 0x0CA7, "GeForce GT 330", 4320 },
{ 0x0CA8, "GeForce GTS 260M", 4400 },
{ 0x0CA9, "GeForce GTS 250M", 4000 },
{ 0x0CAC, "GeForce 315", 3800 },
{ 0x0CAF, "GeForce GT 335M", 3600 },
{ 0x0CB0, "GeForce GTS 350M", 4000 },
{ 0x0CB1, "GeForce GTS 360M", 4400 },
{ 0x0CBC, "Quadro FX 1800M", 3600 },
{ 0x0DC0, "GeForce GT 440", 4000 },
{ 0x0DC4, "GeForce GTS 450", 12530 },
{ 0x0DC5, "GeForce GTS 450", 12530 },
{ 0x0DC6, "GeForce GTS 450", 12530 },
{ 0x0DCD, "GeForce GTS 555M", 10400 },
{ 0x0DCE, "GeForce GT 555M", 10400 },
{ 0x0DD1, "GeForce GTX 460M", 16200 },
{ 0x0DD2, "GeForce GT 445M", 10000 },
{ 0x0DD3, "GeForce GT 435M", 2600 },
{ 0x0DD6, "GeForce GT 550M", 4000 },
{ 0x0DD8, "Quadro 2000", 10000 },
{ 0x0DDA, "Quadro 2000M", 8800 },
{ 0x0DE0, "GeForce GT 440", 4000 },
{ 0x0DE1, "GeForce GT 430", 2800 },
{ 0x0DE2, "GeForce GT 420", 2800 },
{ 0x0DE4, "GeForce GT 520", 3240 },
{ 0x0DE5, "GeForce GT 530", 2800 },
{ 0x0DE9, "GeForce GT 630M", 3200 },
{ 0x0DEA, "GeForce 610M", 3600 },
{ 0x0DEB, "GeForce GT 555M", 10400 },
{ 0x0DEC, "GeForce GT 525M", 2400 },
{ 0x0DEE, "GeForce GT 415M", 2000 },
{ 0x0DF0, "GeForce GT 425M", 2240 },
{ 0x0DF1, "GeForce GT 420M", 2000 },
{ 0x0DF2, "GeForce GT 435M", 2600 },
{ 0x0DF4, "GeForce GT 540M", 2688 },
{ 0x0DF5, "GeForce GT 525M", 2400 },
{ 0x0DF6, "GeForce GT 550M", 4000 },
{ 0x0DF7, "GeForce GT 520M", 2960 },
{ 0x0DF8, "Quadro 600", 2560 },
{ 0x0DFA, "Quadro 1000M", 2800 },
{ 0x0DFC, "NVS 5200M", 2500 },
{ 0x0E22, "GeForce GTX 460", 16200 },
{ 0x0E23, "GeForce GTX 460 SE", 20800 },
{ 0x0E24, "GeForce GTX 460", 21600 },
{ 0x0E31, "GeForce GTX 485M", 18400 },
{ 0x0E3A, "Quadro 3000M", 14400 },
{ 0x0E3B, "Quadro 4000M", 15200 },
{ 0x0F00, "GeForce GT 630", 7000 },
{ 0x0F01, "GeForce GT 620", 3240 },
{ 0x0FC0, "GeForce GT 640", 12800 },
{ 0x0FC1, "GeForce GT 640", 12800 },
{ 0x0FC2, "GeForce GT 630", 7000 },
{ 0x0FC6, "GeForce GTX 650", 16900 },
{ 0x0FD1, "GeForce GT 650M", 11800 },
{ 0x0FD2, "GeForce GT 640M", 10000 },
{ 0x0FD4, "GeForce GTX 660M", 13400 },
{ 0x0FD5, "GeForce GT 650M", 11800 },
{ 0x0FD8, "GeForce GT 640M", 10000 },
{ 0x0FE0, "GeForce GTX 660M", 13400 },
{ 0x0FE4, "GeForce GT 750M", 15500 },
{ 0x0FFC, "Quadro K1000M", 13600 },
{ 0x1004, "GeForce GTX 780", 41400 },
{ 0x1040, "GeForce GT 520", 3240 },
{ 0x1042, "GeForce 510", 2100 },
{ 0x1049, "GeForce GT 620", 3240 },
{ 0x104A, "GeForce GT 610", 2800 },
{ 0x104B, "GeForce 9600 GT", 10400 },
{ 0x1050, "GeForce GT 520M", 2960 },
{ 0x1051, "GeForce GT 520MX", 3600 },
{ 0x1054, "GeForce 410M", 2300 },
{ 0x1055, "GeForce 410M", 2300 },
{ 0x1056, "NVS 4200M", 3240 },
{ 0x1057, "NVS 4200M", 3240 },
{ 0x1058, "GeForce 610M", 3600 },
{ 0x1080, "GeForce GTX 580", 37060 },
{ 0x1081, "GeForce GTX 570", 29280 },
{ 0x1082, "GeForce GTX 560 Ti", 26300 },
{ 0x1084, "GeForce GTX 560", 25900 },
{ 0x1086, "GeForce GTX 570", 29280 },
{ 0x1087, "GeForce GTX 560 Ti", 26300 },
{ 0x1088, "GeForce GTX 590", 43710 }, // 2xGPU, assume 1.5x perf
{ 0x1089, "GeForce GTX 580", 37060 },
{ 0x109A, "Quadro 5010M", 14400 },
{ 0x10C0, "GeForce 9300 GS", 2268 },
{ 0x10C3, "GeForce 8400GS", 2268 },
{ 0x10C4, "ION", 1600 },
{ 0x10C5, "GeForce 405", 1400 },
{ 0x10D8, "NVS 300", 2356 },
{ 0x1180, "GeForce GTX 680", 32200 },
{ 0x1183, "GeForce GTX 660 Ti", 22000 },
{ 0x1184, "GeForce GTX 770", 33500 },
{ 0x1185, "GeForce GTX 660", 19800 },
{ 0x1187, "GeForce GTX 760", 31360 },
{ 0x1188, "GeForce GTX 690", 45000 }, // 2xGPU, assume 1.5x perf
{ 0x1189, "GeForce GTX 670", 25600 },
{ 0x11A0, "GeForce GTX 680M", 23000 },
{ 0x11A2, "GeForce GTX 675MX", 19200 },
{ 0x11A3, "GeForce GTX 680MX", 23000 },
{ 0x11C0, "GeForce GTX 660", 19800 },
{ 0x11C2, "GeForce GTX 650 TiBoost", 23500 },
{ 0x11C6, "GeForce GTX 650 Ti", 14800 },
{ 0x11E2, "GeForce GTX 765M", 13600 },
{ 0x1200, "GeForce GTX 560 Ti", 26300 },
{ 0x1201, "GeForce GTX 560", 25900 },
{ 0x1205, "GeForce GTX 460 v2", 20800 },
{ 0x1206, "GeForce GTX 555", 20800 },
{ 0x1208, "GeForce GTX 560 SE", 17700 },
{ 0x1210, "GeForce GTX 570M", 13800 },
{ 0x1211, "GeForce GTX 580M", 19800 },
{ 0x1212, "GeForce GTX 675M", 19800 },
{ 0x1213, "GeForce GTX 670M", 14600 },
{ 0x1241, "GeForce GT 545", 14000 },
{ 0x1243, "GeForce GT 545", 14000 },
{ 0x1244, "GeForce GTX 550 Ti", 21600 },
{ 0x1245, "GeForce GTS 450", 12530 },
{ 0x1246, "GeForce GT 550M", 2960 },
{ 0x1247, "GeForce GT 555M", 10400 },
{ 0x124B, "GeForce GT 640", 12800 },
{ 0x124D, "GeForce GT 555M", 10400 },
{ 0x1251, "GeForce GTX 560M", 18600 },
{ 0, 0, 0 },
};


static const GraphicsDeviceDesc kIntelDevices[] = {
{ 0x0042, "GMA HD", 1466 },
{ 0x0046, "GMA HD", 1800 },
{ 0x004A, "GMA HD", 1466 },
{ 0x0102, "SandyBridge GT1", 2000 },
{ 0x0106, "SandyBridge M GT1", 2000 },
{ 0x010A, "SandyBridge Server", 2000 },
{ 0x0112, "SandyBridge GT2", 2400 },
{ 0x0116, "SandyBridge M GT2", 2400 },
{ 0x0122, "SandyBridge GT2+", 2400 },
{ 0x0126, "SandyBridge M GT2+", 2400 },
{ 0x0152, "IvyBridge", 3000 }, // all guesswork, 1.5x SB
{ 0x0156, "IvyBridge", 3000 },
{ 0x015A, "IvyBridge", 3000 },
{ 0x0162, "IvyBridge", 3600 },
{ 0x0166, "IvyBridge", 3600 },
{ 0x016A, "IvyBridge", 3600 },
{ 0x0172, "IvyBridge", 3600 },
{ 0x0176, "IvyBridge", 3600 },
{ 0x0412, "HD Graphics 4600", 5400 },
{ 0x0416, "HD Graphics 4600M", 4800 },
{ 0x0A16, "HD Graphics 4600M", 4800 },
{ 0x0A26, "HD Graphics 5000M", 6400 },
{ 0x1132, "I815", 150 },
{ 0x2562, "82845G", 200 },
{ 0x2572, "82865G", 266 },
{ 0x2582, "915G", 1332 },
{ 0x2592, "915GM", 800 },
{ 0x2772, "945G", 1600 },
{ 0x2776, "945G", 1600 },
{ 0x2782, "915G", 1332 },
{ 0x2792, "915GM", 800 },
{ 0x27A2, "945GM / GMA950", 1000 },
{ 0x27A6, "945GM / GMA950", 1000 },
{ 0x27AE, "945GME / GMA950", 1000 },
{ 0x2972, "946GZ", 1600 },
{ 0x2973, "946GZ", 1600 },
{ 0x2982, "82G35", 1067 },
{ 0x2992, "Q965/Q963", 1600 },
{ 0x2993, "Q965/Q963", 1600 },
{ 0x29A2, "G965", 1067 },
{ 0x29A3, "G965", 1067 },
{ 0x29B2, "Q35", 1600 },
{ 0x29B3, "Q35", 1600 },
{ 0x29C2, "G33/G31", 1600 },
{ 0x29C3, "G33/G31", 1600 },
{ 0x29D2, "Q33", 1600 },
{ 0x29D3, "Q33", 1600 },
{ 0x2A02, "GM965", 1067 },
{ 0x2A03, "GM965", 1067 },
{ 0x2A12, "GME965", 1067 },
{ 0x2A42, "Mobile 4 Series", 1280 },
{ 0x2E02, "4 Series", 1280 },
{ 0x2E12, "4 Series", 1280 },
{ 0x2E22, "G45/G43", 1280 },
{ 0x2E32, "4 Series", 1280 },
{ 0x3577, "I830", 200 },
{ 0x3582, "I855", 233 },
{ 0x358E, "I854", 233 },
{ 0x7121, "I810", 150 },
{ 0x7123, "I810 DC100", 150 },
{ 0x7125, "I810 E", 150 },
{ 0x8108, "GMA 500", 200 },
{ 0x8109, "GMA 500", 400 },
{ 0xA001, "GMA 3150", 1067 },
{ 0xA011, "GMA 3150", 1067 },
{ 0, 0, 0 },
};


static const GraphicsDeviceDesc kSISDevices[] = {
{ 0x6330, "Mirage", 268 },
{ 0x6351, "Mirage 3", 600 },
{ 0, 0, 0 },
};

static const GraphicsDeviceDesc kVIADevices[] = {
{ 0x3371, "Chrome9", 502 },
{ 0, 0, 0 },
};

static const GraphicsDeviceDesc kSoftwareDevices[] = {
{ 0x0405, "Software", 1000 }, // shared ID between Apple Software Renderer and VMWare SVGA
{ 0, 0, 0 },
};

struct GraphicsVendorDesc {
	int vendorID;
	const GraphicsDeviceDesc* devices;
};

static const GraphicsVendorDesc kGraphicsVendors[] = {
	{ 0x1002, kATIDevices },
	{ 0x10DE, kNVIDIADevices },
	{ 0x8086, kIntelDevices },
	{ 0x1039, kSISDevices },
	{ 0x1106, kVIADevices },
	{ 0x15AD, kSoftwareDevices },
	// 3D3D,3DLabs
	// 102B,Matrox
	// 5333,S3
	// 18CA,XGI
	// 1023,Trident
	// 104A,ImgTech
	// 121A,3dfx
	// 1AB8,Parallels
};





static const GraphicsDeviceDesc* FindGraphicsDeviceDesc (int vendorID, int deviceID)
{
	for (size_t iv = 0; iv < ARRAY_SIZE(kGraphicsVendors); ++iv)
	{
		if (kGraphicsVendors[iv].vendorID != vendorID)
			continue;
		const GraphicsDeviceDesc* dev = kGraphicsVendors[iv].devices;
		while (dev->deviceID)
		{
			if (dev->deviceID == deviceID)
				return dev;
			++dev;
		}
	}
	return NULL;
}

int GetGraphicsPixelFillrate (int vendorID, int deviceID)
{
	const GraphicsDeviceDesc* desc = FindGraphicsDeviceDesc (vendorID, deviceID);
	return desc ? desc->pixelFillrate : -1;
}

#endif // GRAPHICS_DEVICES_DB_AVAILABLE

